﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace TP2.Lib
{
    // [XmlInclude(typeof(TorpedoRastreador))]
     [Serializable]
    public class TorpedoRastreador : Proyectil
    {
        const int DANIO_TORPEDORASTREADOR = 100,
                  VIDA_TORPEDORASTREADOR = 1,
                  RADIO_TORPEDORASTREADOR = 1,
                  RAPIDEZ_TORPEDORASTREADOR = 4;

        private TorpedoRastreador() { } /*Contructor vacio, lo utiliza la serialización*/
        
        public TorpedoRastreador(double[] inicio, double[] objetivo, int[] dimensiones) : base(inicio, dimensiones)
        {
            this.Danio = DANIO_TORPEDORASTREADOR;
            this.Vida = VIDA_TORPEDORASTREADOR;
            this.Radio = RADIO_TORPEDORASTREADOR;
            this.Rapidez = RAPIDEZ_TORPEDORASTREADOR;
            this.VengoDeEnemigo = false;
            this.Recorrido = new MovimientoLineal(inicio, objetivo, this.Rapidez);
        }

        public Proyectil Actuar(double[] objetivo) 
        {
            if ((this.Posicion[0] >= this.Dimensiones[0]) | (this.Posicion[0] <= 0) | (this.Posicion[1] >= this.Dimensiones[1]) | (this.Posicion[1] <= 0))
            {
                //Llegue a un borde
                this.ImpactoConBorde();
            }
            else
            {
                //Se mueve
                this.Mover();
                /*modifica trayectoria para impactar al ALgo42*/
                this.Recorrido = new MovimientoLineal(this.Posicion, objetivo, this.Rapidez);
            }
                        
            return null;
        }

        public override Proyectil Actuar()
        {
            this.Mover();
            return null;
        }

        #region ------------ Metodos Privados ------------

        private void Mover()
        {
            double[] posicion = new double[3];
            posicion = this.Recorrido.GetSiguientePunto(this.Posicion);
            this.Posicion = posicion;
        }

        #endregion
    }
}
